package com.wy.tingshu.service;

import com.wy.tingshu.data_object.AlbumDO;
import com.wy.tingshu.data_object.TrackDO;
import com.wy.tingshu.repository.AlbumRepo;
import com.wy.tingshu.repository.RelationRepo;
import com.wy.tingshu.repository.TrackRepo;
import com.wy.tingshu.util.Log;
import com.wy.tingshu.view_object.BindView;
import com.wy.tingshu.view_object.ListAlbumView;
import com.wy.tingshu.view_object.UserVO;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 美女
 * @date 2022/07/19 20:23
 **/
public class AlbumService {
    //此处会涉及到三张表中的信息
    private final AlbumRepo albumRepo=new AlbumRepo();//专辑表
    private final RelationRepo relationRepo=new RelationRepo();//关系表
    private final TrackRepo trackRepo=new TrackRepo();//音频表
    //通过uid(用户),aid(音频)获取已有专辑
    public Object getBindInfo(UserVO currentUser, int aid) {
        //通过aid(专辑表主键),uid筛选出该用户aid=?时的那张专辑表
        AlbumDO albumDO = albumRepo.selectOneByUidAndAid(currentUser.uid,aid);
        if(albumDO==null){//专辑不存在或不属于当前用户
            throw new RuntimeException("aid不存在或者不属于这个用户");
        }
        //通过aid(专辑主键)筛选出关系表中的tid(音频表主键)【查询列表】,找出aid=?时所有的tid/音频的主键
        List<Integer> tidList=relationRepo.selectListByAid(aid);
        List<TrackDO> trackDOList;
        if(tidList.isEmpty()){
            trackDOList=new ArrayList<>();
        }else {
            //通过所有音频主键对应的tid在音频表中找对应音频
            trackDOList = trackRepo.selectListByTidList(tidList);

        }

        return new BindView(currentUser,albumDO,trackDOList);//构造方法
                                                   // currentUser：用户；albumDO：数据库中直接取出来的专辑对象；trackDOList：音频列表

    }

    /*从数据库表中查询出当前用户所有专辑-当前用户对应的专辑列表+把查出来的专辑放到ListAlbumView中*/
    public List<ListAlbumView> listOfUser(UserVO userVO) {
        List<AlbumDO> list = albumRepo.selectListByUid(userVO.uid);
        Log.println("从数据库表中查询到的所有专辑："+list);
        //将AlbumDO->ListAlbumView
        List<ListAlbumView> resultList=new ArrayList<>();
        for(AlbumDO albumDO:list){
            ListAlbumView view=new ListAlbumView(albumDO);
            resultList.add(view);
        }
        Log.println("转换成的准备输出的结果："+resultList);//resultList不但有要用到的专辑，也有currentUser信息
        return resultList;
    }

}
